|
Date : 29 MARS 1992 Programme : CSHOW V8.32A Protection : Fichier : CSHOW.EXE Temps pass� : 30 minutes Soci�t� : SHAREWARE Outils : SOFT-ICE V2.50 Divers : CONFECTION D'UN LANCEUR COM Origine : L.F. Num�ro : 169 Ce fichier pr�sente l'ultime agacement d'une part de faire attendre l'utilisateur au d�but du programme pendant 15 secondes si un ou plusieurs fichiers drivers sont manquant ( ce qui n'en emp�che pas le fonctionnement ). De plus lorsque l'on quitte le soft celui-ci affiche systematiquement un ecran shareware. Le programme �tant crypt� par PKLITE avec l'option UNEXPANDABLE j'ai simplement rep�r� les diff�rentes routines � supprimer et pass� les deux offsets des IP au lanceur ainsi que les patchs � effectuer. 1) Le CALL qui effectue l'affichage du tableau pendant 15 secondes peut �tre contourn� par un test situ� en amont ( forc�ment ! ). Il suffit de forcer le saut se trouvant en: ADR_IP1 CS:B89B 7408 JZ ---> 7508 JNZ 2) Le message de fin se trouve dans le CALL situ� en: ADR_IP2 CS:B9CE E831.. CALL ---> EB01 JMP Ci-dessous le lanceur: ; PATCH POUR LE PROGRAMME CSHOW ( shareware ) ; DETOURNEMENT DE L'INT 1C ; ;****************************************************************************** ; ZONE A INITIALISER adr_ip1 equ 0b89bh ; adresse dont le contenu est � modifier. ; Cette valeur est "directe" adr_ip2 equ 0b9ceh ; seconde valeur d'IP � rechercher. ; Cette valeur est "directe" anc_val equ 0874h ; Valeur d'origine � rechercher. ( 7408 ) nouv_val equ 0875h ; Nouvelle valeur. ( 7508 ) anc_val1 equ 31e8h ; E831.. CALL nouv_val1 equ 01ebh ; EB01 JMP +1 INT_DET equ 1Ch ; Le num�ro de l'INT que l'on veut utiliser. BEEP_TONE EQU 440 ; Beep tone in hertz BEEP_DURATION EQU 0ffffh ;CARTE_OUT_AL equ 1 ; Si 1 on assemble avec le test en IO 300h ;****************************************************************************** seg_a segment byte public . . ;------------------------------ PROGRAMME PERE ------------------------------ loc_1: mov sauve_SP,sp . . . int 21h ; terminate with al=return code sto endp ;---------------------------- int d�tourn�e -------------------------------- int_entry proc far _int: jmp _sp ; On contourne... _SAUVE_SP dw 0,0 ; SP est sauv� dans l'int d�t. _sp: push ax push ds push bx push cx push dx pushf ; Push flags ifdef CARTE_OUT_AL mov dx,300h xor al,al out dx,al ; Allume les 8 leds. else mov dx,301h ; Test pour la carte PANO_AT out dx,al ; RAZ du LS393. endif mov word ptr cs:[_SAUVE_SP],sp mov cx,25 prochain: pop ds dec cx ifdef CARTE_OUT_AL else mov dx,300h out dx,al ; Compte le nombre de d�pilage ; de SP. endif jz s cmp word ptr ds:[adr_ip1],anc_val ; Si ok on patche. jnz prochain mov word ptr ds:[adr_ip1],nouv_val ; On y place le patch. cont: pop ds cmp word ptr ds:[adr_ip2],anc_val1 jnz cont mov word ptr ds:[adr_ip2],nouv_val1 xor bx,bx mov ds,bx ; L'INT 21 n'est pas r�entrante, on ne peut donc pas se servir de ; la fonction 25h ( set int. vector ) mov bx,word ptr cs:data_9 ; Je remets manuellement mov ds:[INT_DET*4],bx ; en place le vecteur mov bx,word ptr cs:data_9+2 ; de l'INT d�tourn�e. mov ds:[INT_DET*4+2],bx ifdef CARTE_OUT_AL mov dx,300h mov al,0ffh ; Carte OUT_AL out dx,al ; Etteint les 8 leds. endif ; Routine sonore qui g�n�re 3 bips si la protection est contourn�e. rebou: mov cx, BEEP_DURATION . . . . jnz main_b ; Trois bips... s: mov sp,word ptr cs:[_SAUVE_SP] popf pop dx pop cx pop bx pop ds pop ax jmp dword ptr cs:data_9 int_entry endp ;------------ REDUCTION DE LA PLACE OCCUPEE PAR LE PROGRAMME COM ------------ init: ; D�codage du texte. . . . fin_init label near ;----------------------- PLACE RESERVEE POUR LA PILE ------------------------ dw 100 dup (' ') fin equ this byte ; ici le sommet de la pile, SP. seg_a ends end start |